package org.example.com.zwh.service;

import org.example.com.zwh.entity.Order;
import org.example.com.zwh.mapper.OrderMapper;
import org.example.com.zwh.util.Snowflake;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.UUID;

@Service
public class OrderService {
    //orderMapper
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    /*
        增加订单
     */
    public int insert(String userId, String productId){
        Snowflake snowflake = new Snowflake(1, 1);
        String idStr = snowflake.nextIdStr();
        Order order = new Order();
        order.setUserId(userId);
        //生成UUID的订单号
        order.setOrderId(idStr);
        order.setProductId(productId);
        order.setStatus(0);
        return orderMapper.insert(order);
    }
    /**
     * 库存预热功能：将数据库中的库存数据加载到Redis中
     * 可以在应用启动时调用该方法，或者在需要预热库存时手动调用
     * 注意：在高并发场景下，可能需要考虑使用分布式锁来避免并发问题
     * 这里简单实现，仅作为示例，实际应用中需要根据具体情况进行优化
     * 例如：使用分布式锁来避免并发问题
     * 例如：使用定时任务来定时更新库存
     * 例如：使用缓存来缓存库存数据
     * @param productId
     */
    public void preheatStock(String productId) {
        int dbStock = orderMapper.getStock(productId);
        redisTemplate.opsForValue().set("seckill:stock:" + productId, dbStock);
    }
}
